#include <iostream>
#include <chrono>

#include <sstream>

#include <iomanip>
#include <codecvt>

//#include <ctime>

// TimeHelper::TimeHelper()
// 	: flag_(std::chrono::system_clock::now())
// {}

std::chrono::time_point<std::chrono::system_clock> flag_;

void StartCountTime()
{
	flag_ = std::chrono::system_clock::now();
}

long long CountTimeNow_MS()
{
	return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - flag_).count();
}

long long CountTimeFromZero_S()
{
	// 返回的是 自1970年1月1日零点开始的时间
	return std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
}

// 输出本地化的时间，默认为英语
void printTimeNow(std::string& str, const char* format)
{
	auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
	std::stringstream ss;
	ss << std::put_time(std::localtime(&t), format);
	str = ss.str();
}

void printTimeNow_utf8(std::string& str, std::string local)
{
	auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
	std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv(std::cout.rdbuf());
	std::wostream out(&conv);
	out.imbue(std::locale(local));
	
	//std::stringstream ss;
	//ss << std::put_time(std::localtime(&t), format);
	out << std::put_time(std::localtime(&t), L"%a %c") <<"\n";
	//str = ss.str();
}

int main() {

	std::string re_time;
	printTimeNow(re_time, "%a %c");
	std::cout <<re_time <<std::endl;

	// 有问题
	//printTimeNow_utf8(re_time, "ja_JP.utf8");
	return 0;
}
